记录一次使用fastjson把json字符串转为对象时属性缺失问题 |
您所在的位置:网站首页 › fastjson string转json对象 › 记录一次使用fastjson把json字符串转为对象时属性缺失问题 |
记录一次使用fastjson把json字符串转为对象时属性缺失问题
一、问题现象1 使用到的POJO:2 复现步骤
二、问题原因三、解决办法四、源码追踪
在一次使用fastJson把json字符串转为对象时,发现有个属性缺失,经多方百度才得问题原因,现将问题原因及解决步骤记录如下:
一、问题现象
问题复现步骤如下 1 使用到的POJO: public class SysUser { private String userName; private String password; private String job; private String gender = "Unknown"; public SysUser(String userName, String password, String job) { this.userName = userName; this.password = password; this.job = job; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "SysUser{" + "userName='" + userName + '\'' + ", password='" + password + '\'' + ", job='" + job + '\'' + ", gender='" + gender + '\'' + '}'; } } 2 复现步骤 public static void main(String[] args) { SysUser sysUser = new SysUser("大王", "大王", "王者"); sysUser.setGender("男"); String jsonString = JSON.toJSONString(sysUser); SysUser userObject = JSON.parseObject(jsonString, SysUser.class); System.out.println(userObject); }debug查看上述代码的执行结果如下图,由执行结果可看到,我给sysUser变量的字段gender赋值了"男",由sysUser转换成的jsonString中的字段gender值也是男,但是使用 JSON.parseObject(jsonString, SysUser.class); 把字符串转为SysUser对象时,gender属性仍然为默认值“Unknown”,也就是说并没有把sonString中的字段值赋予SysUser对象的gender变量: 此问题困惑了我挺久,网查此问题大部分都是缺少字段的set方法或者属性名有问题导致的。由于根本原因的查找未涉及源码追究,暂不表。 直接说结论,结论就是,此pojo有四个属性,但是唯一的一个构造方法只包括了其中三个属性,导致另外一个属性在进行字符串转对象时,无法赋值(我一直以为只要有字段属性的get和set方法,fastJson转换时就会把值赋予给相应字段,原来并不是如此)。 三、解决办法解决方法很简单,可用如下两个方式: 1:增加全参数构造器 2:增加无参构造器 四、源码追踪暂略。。。。。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |